﻿#include "MyOpenGL.h"
#include <QOpenGLShaderProgram>

#define STRINGIZE(x) #x
#define SHADER(shader) "" STRINGIZE(shader)

MyOpenGL::MyOpenGL(QWidget *parent)
    : QOpenGLWidget(parent)
    , program(nullptr)
{

}

void MyOpenGL::initializeGL()
{
    // 为当前环境初始化OpenGL函数
    initializeOpenGLFunctions();

    // 创建顶点着色器
    QOpenGLShader *vshader = new QOpenGLShader(QOpenGLShader::Vertex, this);
    const char *vsrc = SHADER(
        //#version 330\n

        void main() {
            gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
        }
    );

    // 编译源码
    vshader->compileSourceCode(vsrc);
    // 创建片元着色器
    QOpenGLShader *fshader = new QOpenGLShader(QOpenGLShader::Fragment, this);
    const char *fsrc = SHADER(
        //#version 330\n
        void main() {
            gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
        }
    );


    fshader->compileSourceCode(fsrc);

    // 创建着色器程序
    program = new QOpenGLShaderProgram;
    program->addShader(vshader);
    program->addShader(fshader);
    program->link();
    program->bind();
}

void MyOpenGL::paintGL()
{
    // 绘制 - 可设置点，线等
    /*
     * glDrawArrays(GLenum mode, GLint first, GLsizei count)
     * mode: 设置构建图形的类型
     * first: 指定元素起始位置
     * count: 使用顶点数组中的索引为first~first+count-1的元素为顶点来绘制mode指定的图形
    */
    glDrawArrays(GL_POINTS, 0, 1);
}

void MyOpenGL::resizeGL(int w, int h)
{

}


